/***********************************************************************
 * Module:  Vehicule.java
 * Author:  a.kanwar
 * Purpose: Defines the Class Vehicule
 ***********************************************************************/

import java.util.*;


public class Vehicule {
   
    
    /********************************************************************
     * Attribute
     ********************************************************************/
    
   private int idVehicule;
   private java.lang.String numImmatriculation;
   private java.util.Date dateMiseCirculation;
   private java.lang.String carroserie;
   
     
   private java.util.Collection<Sinistre> sinistre;
   private Energie energie;
   private BoiteVitesse boiteVitesse;
   private PuissanceFiscale puissanceFiscale;
   private Marque marque;
   private Assure assure;
   
 
   
   /******************************************************************
    * Constructor
    *******************************************************************/
   
   public Vehicule(int idVehicule, String numImmatriculation, Date dateMiseCirculation, String carroserie, Collection<Sinistre> sinistre, Energie energie, BoiteVitesse boiteVitesse, PuissanceFiscale puissanceFiscale, Marque marque, Assure assure) {
        this.idVehicule = idVehicule;
        this.numImmatriculation = numImmatriculation;
        this.dateMiseCirculation = dateMiseCirculation;
        this.carroserie = carroserie;
        this.sinistre = sinistre;
        this.energie = energie;
        this.boiteVitesse = boiteVitesse;
        this.puissanceFiscale = puissanceFiscale;
        this.marque = marque;
        this.assure = assure;
   }

    public Vehicule(String numImmatriculation, Date dateMiseCirculation, String carroserie, Collection<Sinistre> sinistre, Energie energie, BoiteVitesse boiteVitesse, PuissanceFiscale puissanceFiscale, Marque marque, Assure assure) {
        this.numImmatriculation = numImmatriculation;
        this.dateMiseCirculation = dateMiseCirculation;
        this.carroserie = carroserie;
        this.sinistre = sinistre;
        this.energie = energie;
        this.boiteVitesse = boiteVitesse;
        this.puissanceFiscale = puissanceFiscale;
        this.marque = marque;
        this.assure = assure;
    }

    /***************************************************************
     * getter and setter
     *  
     ***************************************************************/
    
    
    public int getIdVehicule() {
        return idVehicule;
    }

    public void setIdVehicule(int idVehicule) {
        this.idVehicule = idVehicule;
    }

    public String getNumImmatriculation() {
        return numImmatriculation;
    }

    public void setNumImmatriculation(String numImmatriculation) {
        this.numImmatriculation = numImmatriculation;
    }

    public Date getDateMiseCirculation() {
        return dateMiseCirculation;
    }

    public void setDateMiseCirculation(Date dateMiseCirculation) {
        this.dateMiseCirculation = dateMiseCirculation;
    }

    public String getCarroserie() {
        return carroserie;
    }

    public void setCarroserie(String carroserie) {
        this.carroserie = carroserie;
    }

    @Override
    public String toString() {
        return "Vehicule{" + "idVehicule=" + idVehicule + ", numImmatriculation=" + numImmatriculation + ", dateMiseCirculation=" + dateMiseCirculation + ", carroserie=" + carroserie + ", sinistre=" + sinistre + ", energie=" + energie + ", boiteVitesse=" + boiteVitesse + ", puissanceFiscale=" + puissanceFiscale + ", marque=" + marque + ", assure=" + assure + '}';
    }
   
   
    
   
    
   /************************************************************************
    * generate code by power AMC
    * 
    *************************************************************************/

   public java.util.Collection<Sinistre> getSinistre() {
      if (sinistre == null)
         sinistre = new java.util.HashSet<Sinistre>();
      return sinistre;
   }
   
   /** @pdGenerated default iterator getter */
   public java.util.Iterator getIteratorSinistre() {
      if (sinistre == null)
         sinistre = new java.util.HashSet<Sinistre>();
      return sinistre.iterator();
   }
   
   /** @pdGenerated default setter
     * @param newSinistre */
   public void setSinistre(java.util.Collection<Sinistre> newSinistre) {
      removeAllSinistre();
      for (java.util.Iterator iter = newSinistre.iterator(); iter.hasNext();)
         addSinistre((Sinistre)iter.next());
   }
   
   /** @pdGenerated default add
     * @param newSinistre */
   public void addSinistre(Sinistre newSinistre) {
      if (newSinistre == null)
         return;
      if (this.sinistre == null)
         this.sinistre = new java.util.HashSet<Sinistre>();
      if (!this.sinistre.contains(newSinistre))
      {
         this.sinistre.add(newSinistre);
         newSinistre.setVehicule(this);      
      }
   }
   
   /** @pdGenerated default remove
     * @param oldSinistre */
   public void removeSinistre(Sinistre oldSinistre) {
      if (oldSinistre == null)
         return;
      if (this.sinistre != null)
         if (this.sinistre.contains(oldSinistre))
         {
            this.sinistre.remove(oldSinistre);
            oldSinistre.setVehicule((Vehicule)null);
         }
   }
   
   /** @pdGenerated default removeAll */
   public void removeAllSinistre() {
      if (sinistre != null)
      {
         Sinistre oldSinistre;
         for (java.util.Iterator iter = getIteratorSinistre(); iter.hasNext();)
         {
            oldSinistre = (Sinistre)iter.next();
            iter.remove();
            oldSinistre.setVehicule((Vehicule)null);
         }
      }
   }
   /** @pdGenerated default parent getter */
   public Energie getEnergie() {
      return energie;
   }
   
   /** @pdGenerated default parent setter
     * @param newEnergie */
   public void setEnergie(Energie newEnergie) {
      if (this.energie == null || !this.energie.equals(newEnergie))
      {
         if (this.energie != null)
         {
            Energie oldEnergie = this.energie;
            this.energie = null;
            oldEnergie.removeVehicule(this);
         }
         if (newEnergie != null)
         {
            this.energie = newEnergie;
            this.energie.addVehicule(this);
         }
      }
   }
   /** @pdGenerated default parent getter */
   public BoiteVitesse getBoiteVitesse() {
      return boiteVitesse;
   }
   
   /** @pdGenerated default parent setter
     * @param newBoiteVitesse */
   public void setBoiteVitesse(BoiteVitesse newBoiteVitesse) {
      if (this.boiteVitesse == null || !this.boiteVitesse.equals(newBoiteVitesse))
      {
         if (this.boiteVitesse != null)
         {
            BoiteVitesse oldBoiteVitesse = this.boiteVitesse;
            this.boiteVitesse = null;
            oldBoiteVitesse.removeVehicule(this);
         }
         if (newBoiteVitesse != null)
         {
            this.boiteVitesse = newBoiteVitesse;
            this.boiteVitesse.addVehicule(this);
         }
      }
   }
   /** @pdGenerated default parent getter */
   public PuissanceFiscale getPuissanceFiscale() {
      return puissanceFiscale;
   }
   
   /** @pdGenerated default parent setter
     * @param newPuissanceFiscale */
   public void setPuissanceFiscale(PuissanceFiscale newPuissanceFiscale) {
      if (this.puissanceFiscale == null || !this.puissanceFiscale.equals(newPuissanceFiscale))
      {
         if (this.puissanceFiscale != null)
         {
            PuissanceFiscale oldPuissanceFiscale = this.puissanceFiscale;
            this.puissanceFiscale = null;
            oldPuissanceFiscale.removeVehicule(this);
         }
         if (newPuissanceFiscale != null)
         {
            this.puissanceFiscale = newPuissanceFiscale;
            this.puissanceFiscale.addVehicule(this);
         }
      }
   }
   /** @pdGenerated default parent getter */
   public Marque getMarque() {
      return marque;
   }
   
   /** @pdGenerated default parent setter
     * @param newMarque */
   public void setMarque(Marque newMarque) {
      if (this.marque == null || !this.marque.equals(newMarque))
      {
         if (this.marque != null)
         {
            Marque oldMarque = this.marque;
            this.marque = null;
            oldMarque.removeVehicule(this);
         }
         if (newMarque != null)
         {
            this.marque = newMarque;
            this.marque.addVehicule(this);
         }
      }
   }
   /** @pdGenerated default parent getter */
   public Assure getAssure() {
      return assure;
   }
   
   /** @pdGenerated default parent setter
     * @param newAssure */
   public void setAssure(Assure newAssure) {
      if (this.assure == null || !this.assure.equals(newAssure))
      {
         if (this.assure != null)
         {
            Assure oldAssure = this.assure;
            this.assure = null;
            oldAssure.removeVehicule(this);
         }
         if (newAssure != null)
         {
            this.assure = newAssure;
            this.assure.addVehicule(this);
         }
      }
   }

}